package cn.good.yan.serivce.impl;

import cn.good.yan.mapper.AxxMapper;
import cn.good.yan.serivce.AxxService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

/**
 * Axx - 模拟 - 账户表 （记录每个用户的 账户金额情况，还有多少，用了多少）
 *
 * @author shengren.yan
 * @create 2022-04-06
 */

@Service
@Slf4j
public class AxxServiceImpl implements AxxService {
    @Resource
    AxxMapper axxMapper;

    /**
     * 根据 用户进行 扣除金额 （扣减账户余额）
     *
     * @param userId 用户id
     * @param money  本次消费金额
     */
    @Override
    public void decrease(Long userId, Long money) {
        log.info("-------> axx - 进行扣减账户余额 --- 开始");
        axxMapper.decrease(userId, money);
//        myTimeOut();     // 演示 远程调用 - 超时的错
        int age = 10 / 0;  // 演示 远程调用 - 出现异常的错
        log.info("-------> axx - 进行扣减账户余额 --- 结束");
    }

    /**
     * 模拟超时异常，全局事务回滚
     */
    private static void myTimeOut() {
        try {
            TimeUnit.SECONDS.sleep(65);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}



